extern unsigned long dom0_start, dom0_size;
// FIXME address had better be pre-validated on insert
- mask = (1L << ((itir >> 2) & 0x3f)) - 1;
+ mask = itir_mask(itir);
mpaddr = ((pteval & _PAGE_PPN_MASK) & ~mask) | (address & mask);
if (d == dom0) {
if (mpaddr < dom0_start || mpaddr >= dom0_start + dom0_size) {
return (IA64_ILLOP_FAULT);
}
-#define itir_ps(itir) ((itir >> 2) & 0x3f)
-#define itir_mask(itir) (~((1UL << itir_ps(itir)) - 1))
-
unsigned long vhpt_translate_count = 0;
unsigned long fast_vhpt_translate_count = 0;
unsigned long recover_to_page_fault_count = 0;
IA64FAULT vcpu_itc_d(VCPU *vcpu, UINT64 pte, UINT64 itir, UINT64 ifa)
{
- unsigned long pteval, logps = (itir >> 2) & 0x3f;
+ unsigned long pteval, logps = itir_ps(itir);
unsigned long translate_domain_pte(UINT64,UINT64,UINT64);
BOOLEAN swap_rr0 = (!(ifa>>61) && PSCB(vcpu,metaphysical_mode));
IA64FAULT vcpu_itc_i(VCPU *vcpu, UINT64 pte, UINT64 itir, UINT64 ifa)
{
- unsigned long pteval, logps = (itir >> 2) & 0x3f;
+ unsigned long pteval, logps = itir_ps(itir);
unsigned long translate_domain_pte(UINT64,UINT64,UINT64);
BOOLEAN swap_rr0 = (!(ifa>>61) && PSCB(vcpu,metaphysical_mode));
extern UINT64 vcpu_get_tmp(VCPU *, UINT64);
extern void vcpu_set_tmp(VCPU *, UINT64, UINT64);
+static inline UINT64
+itir_ps(UINT64 itir)
+{
+ return ((itir >> 2) & 0x3f);
+}
+
+static inline UINT64
+itir_mask(UINT64 itir)
+{
+ return (~((1UL << itir_ps(itir)) - 1));
+}
+
#endif